package com.zs.netlibrary.http;

import com.zs.netlibrary.http.result.IResultCallback;
import com.zs.netlibrary.http.result.ResultCallback;
import com.zs.netlibrary.utils.SignUtils;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 请求数据封装
 * Created by sheng on 2017/8/15.
 */

public class RequestContent<D> {

    /**
     * 发送请求路径
     */
    private String requestUrl;

    /**
     * 请求解析参照对象
     */
    private Class<D> cls;

    /**
     * 请求参数，new出一个map对象，将默认的先添加进去
     */
//    private Map<String, Object> parameters = SignUtils.getParameters();
    private Map<String, String> parameters ;

    private IResultCallback callback;

    /**
     * 外界传入参数的构造方法，没有返回结果的请求
     */
    public RequestContent(String requestUrl){

    }

    /**
     * 外界传入参数的构造方法，带返回结果的请求，需要传入一个对象依照它来解析数据
     */
    public RequestContent(String requestUrl, Class<D> cls) {
        this.requestUrl = requestUrl;
        this.cls = cls;
    }

    /**
     * 请求内容对象——请求参数为Map对象
     * @param requestUrl 请求地址
     * @param parameters 请求参数
     * @param cls        gson可解析的返回对象，为null表示返回String
     * @param callback   回调接口
     */
    public RequestContent(String requestUrl, Map<String, String> parameters, Class<D> cls, IResultCallback callback) {
        this.requestUrl = requestUrl;
        this.cls = cls;
        this.parameters = parameters;
        this.callback = callback;
    }

    /**
     * 请求内容对象——请求参数为JSONObject对象
     * @param requestUrl 请求地址
     * @param jsonObject 请求参数
     * @param cls        gson可解析的返回对象，为null表示返回String
     * @param callback   回调接口
     */
    public RequestContent(String requestUrl, JSONObject jsonObject, Class<D> cls, ResultCallback callback){
        Map<String, String> map = new HashMap<>();
        try {
            if(jsonObject != null && jsonObject.length() > 0){
                Iterator it = jsonObject.keys();
                while (it.hasNext()) {
                    String key = (String) it.next();
                    String value = (String) jsonObject.get(key);
                    map.put(key, value);
                }
            }
        }catch (JSONException e){
            e.printStackTrace();
        }

        this.requestUrl = requestUrl;
        this.cls = cls;
        this.parameters = map;
        this.callback = callback;
    }


    public String getRequestUrl() {
        return requestUrl;
    }

    public void setRequestUrl(String requestUrl) {
        this.requestUrl = requestUrl;
    }

    public Class<D> getCls() {
        return cls;
    }

    public void setCls(Class<D> cls) {
        this.cls = cls;
    }

    public Map<String, String> getParameters() {
        return parameters;
    }

    public void setParameters(Map<String, String> parameters) {
        this.parameters = parameters;
    }

    public IResultCallback getCallback() {
        return callback;
    }

    public void setCallback(IResultCallback callback) {
        this.callback = callback;
    }
}
